#计算不确定度
import math as mt
alldetails={}
adetails=()
times=int(input('实验进行次数：'))
#修正因子，暴力打表（）
waves=float(input('p:'))
if waves==0.9 and times==3:
    tp=2.92
if waves==0.9 and times==4:
    tp=2.35
if waves==0.9 and times==5:
    tp=2.13
if waves==0.9 and times==6:
    tp=2.02
if waves==0.9 and times==7:
    tp=1.94
if waves==0.9 and times==8:
    tp=1.90
if waves==0.9 and times==9:
    tp=1.86
if waves==0.9 and times==10:
    tp=1.83
if waves==0.9 and times==15:
    tp=1.76
if waves==0.9 and times==20:
    tp=1.73
if waves==0.95:
    if times==3:
        tp=4.60
    if times==4:
        tp=3.38
    if times==5:
        tp=2.78
    if times==6:
        tp=2.57
    if times==7:
        tp=2.46
    if times==8:
        tp=2.37
    if times==9:
        tp=2.31
    if times==10:
        tp=2.26
    if times==15:
        tp=2.15
    if times==20:
        tp=2.09
if waves==0.99:
    if times==3:
        tp=9.93
    if times==4:
        tp=5.84
    if times==5:
        tp=4.60
    if times==6:
        tp=4.03
    if times==7:
        tp=3.71
    if times==8:
        tp=3.50
    if times==9:
        tp=3.36
    if times==10:
        tp=3.25
    if times==15:
        tp=3.25
    if times==20:
        tp=2.86
else :
    print('tp未收录,请输入tp的值:')
    tp=float(input('tp='))
print('tp=',tp)
#tp打表完成
times3=[] #堆数据用的链表
for i in range (0,times):
    print('第',i+1,'次实验数据：')
    x=float(input(''))
    print(x)
    times3.append(x)
allofthem=0
for i in range(0,times):
    allofthem+=times3[i]
averangex=allofthem/times
#A类标准差计算如下
ua=0
xa2=0
for i in range(0,times):
    xa1=times3[i]-averangex
    xa3=xa1**2
    xa2+=xa3
xa4=times*(times-1)
xa5=xa2/xa4
ua=xa5**0.5
UA=ua*tp
#B类标准差
    #仪器不确定度
print('''1.仪器不确定度已知
2.根据仪器本身的准确度等级来进行计算
3.可以连续读数的仪器
4.不可连续读数的仪器
5.数字式仪表    
  ''')
ques1=input('输入编号以确定仪器不确定度：')
qs1=int(ques1)
if qs1==1 :
    dx=int(input('仪器本身的不确定度为：'))
if qs1==2 :
    ques2=int(input('仪器量程：'))
    ques3=int(input('仪器准确度等级：'))
    dx=ques2*ques3/100
if qs1==3:
    ques2=int(input('仪器分度值：'))
    dx=ques2*0.5
if qs1==4:
    ques2=int(input('仪器最小分度值：'))
    dx=ques2
if qs1==5 :
    dx=1
    #最终归纳
y1=3**0.5
dx1=dx/y1
UAll=(UA**2+dx1**2)**0.5
print('本次实验数据：')
print(averangex,'±',UAll)